// Source file:
// G:\\5o_ano\\PCS2040\\desenvolvimento\\rose\\Servidor\\Roteamento\\Vertice.java

package servidor.roteamento;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

import comum.Localizacao;

public abstract class Vertice {

    private String nome;
    private String descricao;
    private ArrayList verticesAdjacentes;
    private Localizacao localizacao;
    
    private Grafo grafoQueContem;

    /**
     * @roseuid 426D7C5200CB
     */
    public Vertice() {
        verticesAdjacentes = new ArrayList();
    }

    /**
     * @roseuid 4262C7FC031C
     */
    public VerticeSubMapa getSubMapaPai() {
    	return grafoQueContem.getVerticeQueContem();
    }

    public boolean addVerticeAdjacente(VerticeAdjacente adj) {
        return verticesAdjacentes.add(adj);
    }

    /**
     * @roseuid 4262C80500FA
     */
    public int getNivelHierarquico() {
        return grafoQueContem.getNivelHierarquico();
    }
    
    /**
     * @return Returns the descricao.
     */
    public String getDescricao() {
        return descricao;
    }
    /**
     * @param descricao
     *            The descricao to set.
     */
    public void setDescricao(String descricao) {
        this.descricao = descricao;
    }

    /**
     * @return Returns the nome.
     */
    public String getNome() {
        return nome;
    }
    /**
     * @param nome
     *            The nome to set.
     */
    public void setNome(String nome) {
        this.nome = nome;
    }

    /**
     * @return Returns the verticesAdjacentes.
     */
    public ArrayList getVerticesAdjacentes() {
        return verticesAdjacentes;
    }
    /**
     * @param verticesAdjacentes
     *            The verticesAdjacentes to set.
     */
    public void setVerticesAdjacentes(ArrayList verticesAdjacentes) {
        this.verticesAdjacentes = verticesAdjacentes;
    }
    
    /**
     * @return Returns the localizacao.
     */
    public Localizacao getLocalizacao() {
        return localizacao;
    }
    /**
     * @param localizacao The localizacao to set.
     */
    public void setLocalizacao(Localizacao localizacao) {
        this.localizacao = localizacao;
    }
    
	/**
	 * @return Returns the grafoQueContem.
	 */
	public Grafo getGrafoQueContem() {
		return grafoQueContem;
	}
	/**
	 * @param grafoQueContem The grafoQueContem to set.
	 */
	public void setGrafoQueContem(Grafo grafoQueContem) {
		this.grafoQueContem = grafoQueContem;
	}
	
	public int getCustoPara(Vertice vertice, int restricao) {
    	Collection adjacentes = this.getVerticesAdjacentes();
		for (Iterator iter = adjacentes.iterator(); iter.hasNext();) {
			VerticeAdjacente vAdj = (VerticeAdjacente) iter.next();
			if(vAdj.getVertice() == vertice) {
				return vAdj.getCusto(restricao);
			}
		}
		return 0;
    }
	
    public String toString() {
        return nome;
    }
}